/**
 * @description: 文本处理
 * @file: text.ts
 * @author: Evan
 * @date: 2025.07.17 15:38:49
 * @week: 周四
 * @version: V
 */

import { Scene } from '../class'
import * as MD from '../data/methods'

type ST = InstanceType<typeof Scene>

export function text(core: ST) {
  return {
    add() {
      const gui = core.gui
      const options = {
        size: 12,
        color: 0xffffff,
        depth: 0, // s深度
        curveSegments: 12, // 曲线分段
        bevelThickness: 1, // 斜面厚度
        bevelSize: 0.1, // 斜角大小
        bevelEnabled: true, // 斜角
        bevelSegments: 3 // 斜角分段
      }

      const params = {
        text: 'Evan',
        create: () => {
          this.createText(params.text, params.ttf, options)
        },
        ttf: 'You_She'
      }
      const group = gui.addFolder('文本处理')

      group.add(params, 'text').name('文本')

      group
        .add(params, 'ttf', [
          'kenpixel',
          'You_She',
          'SiYuan',
          'SHANGSHOUPOBINGTI-2',
          'SourceHanSansCN-Bold'
        ])
        .name('字体文件')
        .onChange(() => {
          this.createText(params.text, params.ttf, options)
        })
      group.add(options, 'size', 8, 200).name('字体大小')
      group.addColor(options, 'color').name('颜色')
      group.add(options, 'depth', 0, 20).name('深度')
      group.add(options, 'curveSegments', 2, 36).name('曲线分段')
      group.add(options, 'bevelThickness', 0.1, 10).name('斜面厚度')
      group.add(options, 'bevelSize', 0.1, 2).name('斜角大小')
      group.add(options, 'bevelEnabled').name('斜角')
      group.add(options, 'bevelSegments', 1, 30).step(1).name('斜角分段')

      group.add(params, 'create').name('生成')

      group.close()
    },

    // 创建文本
    createText(text: string, ttf: string, options: Parameters<typeof MD.createText>[2]) {
      // 清除
      if (core.text) {
        core.scene.remove(core.text)
      }

      const url = core.options.baseUrl + `/fonts/${ttf}.ttf`
      MD.loadTTFFont(url).then(font => {
        core.text = MD.createText(font, text, options)
        core.addObject(core.text)
      })
    }
  }
}
